home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / ASSEMBLE / H235A.ZIP / ASM_0_M.ZIP / FLIP.ASM < prev    next >
Assembly Source File  |  1982-10-04  |  8KB  |  140 lines

  1.          TITLE DOS Keyboard Setup Command FLIP
  2.          COMMENT *
  3.                  This assembly language routine allows the use to change the
  4.                  state of the Num Lock and Caps Lock Keys via a DOS command.
  5.                  Syntax:
  6.                         FLIP |NUM| |ON |
  7.                              |CAP| |OFF|
  8.                         or
  9.                         FLIP |MONO |
  10.                              |COLOR| |80|
  11.                                      |40|
  12.                 Where NUM indicates to change the Num Lock state and CAP
  13.                 indicates to change the Caps Lock state.  ON indicates
  14.                 to use numbers or capitals respecitively, OFF has the
  15.                 obvious effect.
  16.                 The MONO and COLOR parameters flip between the MONO and
  17.                 COLOR display adapter cards on systems so equipped:  40 or
  18.                 80 defines the number of characters per line if the COLOR
  19.                 parameter is used: 40 or 80 is not necessary for MONO.
  20.                 This command must be converted to a COM file via the DEBUG
  21.                 Write command or the PC-DOS 1.10 EXE to BIN convertor.  This
  22.                 code WILL NOT RUN as an EXE file.  A BASIC program is available
  23.                 to generate this COM file.
  24.                 Copyright (c) 1982 Thomas J. Foth
  25.                 Rights granted to distribute this routine with the inclusion of
  26.                 this notice but not for profit.
  27.                 Author makes no warranty, expressed or implied, as to the
  28.                 correct nature and operation of this software.
  29.                 *
  30. BIOSDATA SEGMENT AT 40H                        ;Map the BIOS Data segment
  31.          ORG     10H
  32. EQUIP_FLAG DB    ?                             ;Map the equipment flags
  33. MONOMODE EQU     30H                           ;Mono card bits
  34. CL40MODE EQU     10H                           ;Color 40x25 bits
  35. CL80MODE EQU     20H                           ;Color 80x25 bits
  36. MONOINIT EQU     07H                           ;AX value for video call
  37. CL80INIT EQU     02H                           ;
  38. CL40INIT EQU     00H                           ;
  39.          ORG     17H
  40. KB_FLAG  DB      ?                             ;Map the KB key
  41. CAPS_STATE EQU   40H
  42. NUM_STATE EQU    20H
  43. BIOSDATA ENDS
  44. ;STACKSEG SEGMENT STACK                         ;Fake out linker
  45. ;STACKSEG ENDS
  46. FLIPKB   SEGMENT PARA PUBLIC 'CODE'
  47.          ASSUME  CS:FLIPKB
  48.          ORG     5DH
  49. CAPNUM   DB      3 DUP(?)                      ;First formatted file
  50.          ORG     6DH
  51. ON_OFF   DB      3 DUP(?)                      ;Second formatted file
  52.          ORG     100H
  53. START:   MOV     AX,40H                        ;Segment of BIOS work space
  54.          MOV     DS,AX                         ;Set up DS for addressability
  55.          ASSUME  DS:BIOSDATA
  56.          MOV     BL,CAPS_STATE                 ;Assume caps
  57.          MOV     SI,OFFSET CAPNUM              ;Point to parm
  58.          MOV     DI,OFFSET CAPPARM             ;Point to literal
  59.          MOV     CX,3                          ;Three chars to test
  60.          CLD                                   ;forward compare
  61.          REPE    CMPS CS:BYTE PTR [SI],ES:[DI] ;Do the compare
  62.          CMP     CX,0                          ;all chars equal
  63.          JZ      SET                           ;Yep
  64.          MOV     BL,NUM_STATE                  ;May be num state
  65.          MOV     SI,OFFSET CAPNUM              ;point to parm
  66.          MOV     DI,OFFSET NUMPARM             ;point to literal
  67.          MOV     CX,3                          ;three chars
  68.          REPE    CMPS CS:BYTE PTR [SI],ES:[DI] ;do compare
  69.          CMP     CX,0                          ;all three chars same
  70.          JNZ     TST4DISP                      ;Nope, go check for display
  71. SET:     MOV     SI,OFFSET ON_OFF              ;Point to parm
  72.          MOV     AX,CS:ONPARM                  ;get literal
  73.          CMP     AX,ES:[SI]                    ;the same
  74.          JE      SETON                         ;Yep, go OR
  75.          MOV     SI,OFFSET ON_OFF              ;Point to parm
  76.          MOV     DI,OFFSET OFFPARM             ;Point to literal
  77.          MOV     CX,3                          ;three chars to compare
  78.          REPE    CMPS CS:BYTE PTR [SI],ES:[DI] ;Compare
  79.          CMP     CX,0                          ;All three same
  80.          JNZ     PRTERR                        ;Nope, go display error
  81.          XOR     BL,0FFH                       ;Flip the bit
  82.          AND     KB_FLAG,BL                    ;Pass all but CAPS or NUM
  83.          INT     20H                           ;Exit
  84. SETON:   OR      KB_FLAG,BL                    ;Turn CAPS or NUM on
  85.          INT     20H                           ;Exit
  86. TST4DISP:MOV     SI,OFFSET CAPNUM              ;point to parm
  87.          MOV     DI,OFFSET MONOPARM            ;point to literal
  88.          MOV     CX,4                          ;four chars
  89.          REPE    CMPS CS:BYTE PTR [SI],ES:[DI] ;do compare
  90.          CMP     CX,0                          ;all four chars same
  91.          JNZ     TST4COLR                      ;Nope
  92.          OR      EQUIP_FLAG,MONOMODE           ;Flip to mono mode
  93.          MOV     AX,MONOINIT                   ;Do mono initialization
  94.          INT     10H                           ;Call video
  95.          INT     20H                           ;Return
  96. PRTERR:  MOV     DX,OFFSET ERROR1              ;Point to string
  97.          MOV     AX,CS                         ;Restore DS
  98.          MOV     DS,AX                         ;Via AX
  99.          MOV     AH,9                          ;Print function
  100.          INT     21H                           ;Display error message
  101.          INT     20H                           ;Exit
  102. TST4COLR:MOV     SI,OFFSET CAPNUM              ;point to parm
  103.          MOV     DI,OFFSET COLRPARM            ;point to literal
  104.          MOV     CX,5                          ;five chars
  105.          REPE    CMPS CS:BYTE PTR [SI],ES:[DI] ;do compare
  106.          CMP     CX,0                          ;all five chars same
  107.          JNZ     PRTERR                        ;Nope
  108.          MOV     SI,OFFSET ON_OFF              ;Point to parm
  109.          MOV     AX,CS:N80PARM                 ;get literal
  110.          CMP     AX,ES:[SI]                    ;the same
  111.          JNE     TST_4_40                      ;Nope, go check for 40x25
  112.          MOV     CL,CL80MODE                   ;80x25 mode
  113.          MOV     BX,CL80INIT                   ;Do 80x25 BW init
  114.          JMP     SETCOLOR                      ;Go set color
  115. TST_4_40:MOV     AX,CS:N40PARM                 ;get literal
  116.          CMP     AX,ES:[SI]                    ;the same
  117.          JNE     PRTERR                        ;Nope, display error
  118.          MOV     CL,CL40MODE                   ;40x25 mode
  119.          MOV     BX,CL40INIT                   ;Init for 40x25 mode
  120. SETCOLOR:MOV     AL,0CFH                       ;Move in mask
  121.          AND     AL,EQUIP_FLAG                 ;Get the equipment flag
  122.          OR      AL,CL                         ;Set appropriate color mode
  123.          MOV     EQUIP_FLAG,AL                 ;Set the flag back
  124.          MOV     AX,BX                         ;Set up to
  125.          INT     10H                           ;call video
  126.          INT     20H                           ;Return
  127. ONPARM   DW      'NO'
  128. OFFPARM  DB      'OFF'
  129. CAPPARM  DB      'CAP'
  130. NUMPARM  DB      'NUM'
  131. MONOPARM DB      'MONO'
  132. COLRPARM DB      'COLOR'
  133. N80PARM  DW      '08'
  134. N40PARM  DW      '04'
  135. ERROR1   DB      0AH,0DH
  136.          DB      'FLIP ignored: Invalid parameter'
  137.          DB      0AH,0DH,24H
  138. FLIPKB   ENDS
  139.          END     START
  140.